package com.tools.web.interceptor.auth;

import com.tools.common.object.Note;

import java.util.Locale;

/**
 * 登录设备类型 ID 枚举
 * */
@Note("登录设备类型 ID 枚举")
public enum LoginDeviceTypeEnum {

    BROWSER("browser"),
    APP("app"),
    MINIAPP("miniapp");


    private final String id;

    LoginDeviceTypeEnum(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    @Override
    public String toString() {
        return id;
    }

    @Note("安全地根据 “客户端类型 ID” 返回枚举实例。不会抛异常")
    public static LoginDeviceTypeEnum getEnumSafe(String id) {
        if(id == null) return null;
        switch (id.toLowerCase(Locale.ROOT)) {
            case "browser": return BROWSER;
            case "app": return APP;
            case "miniapp": return MINIAPP;
            default: return null;
        }
    }

    @Note("直接根据 “客户端类型 ID” 返回枚举实例。获取不到会抛异常")
    public static LoginDeviceTypeEnum getEnum(String id) {
        LoginDeviceTypeEnum res = getEnumSafe(id);
        if (res == null) {
            throw new IllegalArgumentException("不知道 " + id + " 是什么类型的枚举");
        }
        return res;
    }


    @Note("是否存在 ID 所属的设备类型")
    public static boolean contains(String id) {
        return getEnumSafe(id) != null;
    }
}
